package DAOs;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import Beans.Bieding;
import Beans.Gebruiker;
import Database.DBmanager;

public class GebruikerDAO {

	private String sqlGebruikerCreate 	= "INSERT INTO APP.USERS(voornaam, achternaam, email, telefoon, wachtwoord, adres, saldo) VALUES(?, ?, ?, ?, ?, ?, 0)";
	private String sqlGebruikerRead 	= "SELECT userID, saldo, voornaam, achternaam, email, telefoon, wachtwoord, adres FROM APP.USERS";
	private String sqlGebruikerDelete 	= "DELETE FROM APP.USERS where userID = ?";
	private String sqlGebruikerUpdate 	= "UPDATE ";
	private String sqlGebruikerBijEmail = "SELECT userID, saldo, voornaam, achternaam, email, telefoon, wachtwoord, adres FROM APP.USERS WHERE email = ?";

	private Connection con 					= null;
	private PreparedStatement psCreate 		= null;
	private PreparedStatement psRead 		= null;
	private PreparedStatement psDelete 		= null;
	private PreparedStatement psUpdate 		= null;
	private PreparedStatement psGetBijEmail = null;
	
	public GebruikerDAO() {
		DBmanager myDb = DBmanager.getInstance();
		con = myDb.getConnection();
		
		try {
			this.psCreate = con.prepareStatement(sqlGebruikerCreate);
			this.psRead = con.prepareStatement(sqlGebruikerRead);
			this.psDelete = con.prepareStatement(sqlGebruikerDelete);
			//this.psUpdate = con.prepareStatement(sqlGebruikerUpdate);
			this.psGetBijEmail = con.prepareStatement(sqlGebruikerBijEmail);
			Statement stmt = con.createStatement();
			
			stmt.close();
			
		} catch (SQLException se) {
			printSQLException(se);
			
		}
	}
	
	private void printSQLException(SQLException se) {
		while (se != null) {
			se.printStackTrace();
			System.out.print("SQLException: State:   " + se.getSQLState());
			System.out.println("Severity: " + se.getErrorCode());
			System.out.println(se.getMessage());

			se = se.getNextException();
			
		}
	}

	public void nieuweGebruiker(String email, String wachtwoord,
			String voornaam, String achternaam, String adres, String telefoon) {
			
		//"INSERT INTO APP.USERS(voornaam, achternaam, email, telefoon, wachtwoord, adres, saldo) VALUES(?, ?, ?, ?, ?, ?, 0)";

		try {
			psCreate.clearParameters();

			
			psCreate.setString(1, voornaam);
			psCreate.setString(2, achternaam);
			psCreate.setString(3, email);
			psCreate.setString(4, telefoon);
			psCreate.setString(5, wachtwoord);
			psCreate.setString(6, adres);
			

			int resultaat = psCreate.executeUpdate();
			if (resultaat == 0) {
				System.out.println("niets gebeurd in createVeiling");
			}

		} catch (SQLException se) {
			printSQLException(se);
		}
		
	}

	public Gebruiker getGebruikerBijEmail(String email) {
		Gebruiker gebruiker = null;
		
		try {
			
			System.out.println("Gebruiker dao. getbijemail testregel + " + email);
			psGetBijEmail.setString(1, email);
			ResultSet result =  psGetBijEmail.executeQuery();
			while(result.next()){
				//"SELECT userID, saldo, voornaam, achternaam, email, telefoon, wachtwoord, adres
				
				int userID = result.getInt(1);
				System.out.println(userID);
				int saldoInCenten = result.getInt(2);
				String voornaam = result.getString(3);
				String achternaam = result.getString(4);
				//email weten we al
				String telefoonNummer = result.getString(6);
				String wachtwoord = result.getString(7);
				String adres = result.getString(8);
				
				
				gebruiker = new Gebruiker();
				gebruiker.setAll(	userID,
									voornaam,
									achternaam,
									saldoInCenten, 
									email, 
									wachtwoord, 
									adres, 
									telefoonNummer);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return gebruiker;
	}
}
